package com.sxu.fighting.day1;

public class Test8 {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] res = new int[n];
        for (int i = 0; i < n; i++) {
            res[i] = 1; // 初始化结果数组为1
        }

        // 计算左侧乘积
        int left = 1;
        for (int i = 0; i < n; i++) {
            res[i] *= left; // 乘左侧累积乘积
            left *= nums[i]; // 更新左侧累积
        }

        // 计算右侧乘积
        int right = 1;
        for (int i = n - 1; i >= 0; i--) {
            res[i] *= right; // 乘右侧累积乘积
            right *= nums[i]; // 更新右侧累积
        }

        return res;
    }

    public int[] productExceptSelf2(int[] nums) {
        int len = nums.length;
        if (len == 0) return new int[0];
        int[] ans = new int[len];

        // 计算左侧乘积
        ans[0] = 1;
        for (int i = 1; i < len; i++) {
            ans[i] = ans[i - 1] * nums[i - 1];
        }

        // 计算右侧乘积并合并结果
        int tmp = 1;
        for (int i = len - 2; i >= 0; i--) {
            tmp *= nums[i + 1];   // 更新右侧累积
            ans[i] *= tmp;        // 乘右侧累积
        }

        return ans;
    }
}
